﻿namespace _10_结构;

public struct Point
{
    public int x;
    public int y;

    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public override string ToString()
    {
        return string.Format("Point x:{0}, y:{1}", x, y);
    }
}

public struct Person
{
    public string name;
    public int age;

    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public override string ToString()
    {
        return string.Format("Person name:{0}, age:{1}", name, age);
    }
}

internal class Program
{
    private static void Main(string[] args)
    {
        #region 0_概念, 或者说特性

        // 0. 结构是值类型, 是轻量级的对象类型
        // 1. 所有的struct类型都继承自System.ValueType, 并且继承自System.Object
        // 2. 结构不是抽象的, 总是被隐式密封的, 不能被继承
        // 3. struct定义中不允许使用抽象修饰符和密封修饰符, 不允许struct声明无参数的构造函数
        // 4. struct可以用作nullable类型, 可以被分配空值

        #endregion


        #region 1_创建结构

        //// 一般的struct为值类型的定义, 为轻量级的对象, 而类则实现更加重量级的对象类型
        //Point p = new Point(2, 5);
        //Console.WriteLine(p); // Point x:2, y:5

        #endregion

        #region 2_不使用new创建结构

        //Person p;
        //p.name = "Tom";
        //p.age = 10;
        //Console.WriteLine(p);

        #endregion

        #region 3_基本类型为结构

        //float x = 12.3f;
        //int y = 20;
        //bool z = true;

        //// 通过文档查看, 可以确定这些值的类型都是结构类型
        //Console.WriteLine(x.GetType()); // System.Single
        //Console.WriteLine(y.GetType()); // System.Int32
        //Console.WriteLine(z.GetType()); // System.Boolean

        #endregion
    }
}